package nacos

import (
	"fmt"
	"github.com/spf13/viper"
	//_ "github.com/spf13/viper/remote"
	remote "github.com/yoyofxteam/nacos-viper-remote"
	"time"
)

func ReadNacos() {
	remote_viper := viper.New()
	// 配置 Viper for Nacos 的远程仓库参数
	remote.SetOptions(&remote.Option{
		Url:         "127.0.0.1",                        // nacos server 多地址需要地址用;号隔开，如 Url: "loc1;loc2;loc3"
		Port:        8848,                               // nacos server端口号
		NamespaceId: "dev",                              // nacos namespace
		GroupName:   "DEFAULT_GROUP",                    // nacos group
		Config:      remote.Config{DataId: "my-config"}, // nacos DataID
		Auth:        nil,                                // 如果需要验证登录,需要此参数
	})

	err := remote_viper.AddRemoteProvider("nacos", "localhost", "")
	if nil != err {
		panic("read nacos err")
	}
	remote_viper.SetConfigType("properties")

	_ = remote_viper.ReadRemoteConfig()           //sync get remote configs to remote_viper instance memory . for example , remote_viper.GetString(key)
	_ = remote_viper.WatchRemoteConfigOnChannel() //异步监听Nacos中的配置变化，如发生配置更改，会直接同步到 viper实例中。

	appName := remote_viper.GetString("key") // sync get config by key

	fmt.Println(appName)

	// 这里不是必须的，只为了监控Demo中的配置变化，并打印出来
	go func() {
		for {
			time.Sleep(time.Second * 30) // 每30秒检查配置是否发生变化
			appName = remote_viper.GetString("server.port")
			fmt.Println(appName)
		}
	}()
}
